package org.jsola.hr.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.dto.TreatmentDisposeTemplateAddDTO;
import org.jsola.hr.dto.TreatmentDisposeTemplateUpdateDTO;
import org.jsola.hr.entity.TreatmentDisposeTemplateDO;
import org.jsola.hr.query.TreatmentDisposeTemplateQuery;
import org.jsola.hr.vo.FormGroupVO;
import org.jsola.hr.vo.TreatmentDisposeTemplateListVO;
import org.jsola.hr.vo.TreatmentDisposeTemplateVO;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;

/**
 * 待遇处理模板
 *
 * @author zhr
 */
@Api(tags = "hr-待遇处理模板")
public interface ITreatmentDisposeTemplateControllerAPI {

    /**
     * 新增待遇处理模板
     *
     * @param treatmentDisposeTemplateAddDTO 待遇处理模板新增实体
     * @return 待遇处理模板展示对象
     */
    @ApiOperation(value = "新增待遇处理模板")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "treatmentDisposeTemplateAddDTO", dataType = "TreatmentDisposeTemplateAddDTO", value = "新增待遇处理模板", paramType = "body")
    })
    Result<TreatmentDisposeTemplateVO> save(TreatmentDisposeTemplateAddDTO treatmentDisposeTemplateAddDTO);


    /**
     * 修改待遇处理模板
     *
     * @param treatmentDisposeTemplateUpdateDTO 待遇处理模板
     * @return 更新数量
     */
    @ApiOperation(value = "修改待遇处理模板")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "treatmentDisposeTemplateUpdateDTO", dataType = "TreatmentDisposeTemplateUpdateDTO", value = "修改待遇处理模板", paramType = "body")
    })
    Result<Integer> update(TreatmentDisposeTemplateUpdateDTO treatmentDisposeTemplateUpdateDTO);


    /**
     * 删除单个待遇处理模板，彻底删除
     *
     * @param treatmentDisposeTemplateId 待遇处理模板id
     * @return 删除数量
     */
    @ApiOperation(value = "删除单个待遇处理模板，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "treatmentDisposeTemplateId", dataType = "String", value = "待遇处理模板id", paramType = "path")
    })
    Result<Integer> delete(String treatmentDisposeTemplateId);


    /**
     * 批量删除待遇处理模板，彻底删除
     *
     * @param treatmentDisposeTemplateIds 待遇处理模板id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除待遇处理模板，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "treatmentDisposeTemplateIds", dataType = "String[]", value = "待遇处理模板id数组", paramType = "body", allowMultiple = true)
    })
    Result<Integer> deleteBatch(String[] treatmentDisposeTemplateIds);


    /**
     * 根据待遇处理模板id查询待遇处理模板详情
     *
     * @param treatmentDisposeTemplateId 待遇处理模板id
     * @return 待遇处理模板详情
     */
    @ApiOperation(value = "根据待遇处理模板id查询待遇处理模板详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "treatmentDisposeTemplateId", dataType = "String", value = "待遇处理模板id", paramType = "path")
    })
    Result<TreatmentDisposeTemplateVO> findById(String treatmentDisposeTemplateId);


    /**
     * 查询待遇处理模板
     *
     * @param treatmentDisposeTemplateQuery 待遇处理模板查询参数
     * @return page
     */
    @ApiOperation(value = "查询待遇处理模板")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "treatmentDisposeTemplateQuery", dataType = "TreatmentDisposeTemplateQuery", value = "待遇处理模板查询参数", paramType = "query")
    })
    Result<List<TreatmentDisposeTemplateListVO>> listAll(TreatmentDisposeTemplateQuery treatmentDisposeTemplateQuery);


    /**
     * 分页查询待遇处理模板
     *
     * @param treatmentDisposeTemplateQuery 待遇处理模板查询参数
     * @return page
     */
    @ApiOperation(value = "分页查询待遇处理模板")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "treatmentDisposeTemplateQuery", dataType = "TreatmentDisposeTemplateQuery", value = "待遇处理模板查询参数", paramType = "query")
    })
    Result<Page<TreatmentDisposeTemplateListVO>> page(TreatmentDisposeTemplateQuery treatmentDisposeTemplateQuery);

    /**
     * 查询当前登录用户租户的默认待遇处理模板
     *
     * @return 默认模板
     */
    @ApiOperation(value = "查询当前登录用户租户的默认待遇处理模板")
    Result<List<TreatmentDisposeTemplateVO>> selectSiteDefaultTemplate();

    /**
     * 分页查询租户下的的自定义模板
     *
     * @param templateQuery 查询条件
     * @return 租户下的自定义模板
     */
    @ApiOperation(value = "分页查询租户下的的自定义模板")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "templateQuery", dataType = "TreatmentDisposeTemplateQuery", value = "查询条件", paramType = "query")
    })
    Result<Page<TreatmentDisposeTemplateVO>> selectCustomTemplatePage(TreatmentDisposeTemplateQuery templateQuery);

    /**
     * 查询租户下所有待遇处理模板
     *
     * @param name 模板名称
     * @return 模板列表
     */
    @ApiOperation(value = "查询租户下所有待遇处理模板")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "name", dataType = "String", value = "模板名称", paramType = "query")
    })
    Result<List<TreatmentDisposeTemplateDO>> selectAllTemplateBySite(String name);

    /**
     * 根据模板Id查询对应待遇处理模板的详情
     *
     * @param templateId 模板Id
     * @return 模板详情
     */
    @ApiOperation(value = "分页查询租户下的的自定义模板")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "templateId", dataType = "String", value = "模板Id", paramType = "path")
    })
    Result<TreatmentDisposeTemplateVO> selectTemplateInfoById(String templateId);

    /**
     * 根据模板生成Excel
     *
     * @param templateId 模板id
     * @return Excel
     */
    @ApiOperation(value = "根据模板生成Excel")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "templateId", dataType = "String", value = "模板Id", paramType = "path")
    })
    ResponseEntity<Resource> generateExcel(String templateId);

    /**
     * 查询模板下的所有流程
     *
     * @param templateId 模板Id
     * @return 流程列表
     */
    @ApiOperation(value = "查询模板下的所有流程")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "templateId", dataType = "String", value = "模板Id", paramType = "path")
    })
    Result<List<FormGroupVO>> selectProcessChildByTemplateId(String templateId);

    /**
     * copy模板
     *
     * @param templateId 模板Id
     * @return copy结果
     */
    @ApiOperation(value = "copy模板")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "templateId", dataType = "String", value = "模板Id", paramType = "path")
    })
    Result<String> copyTemplate(String templateId);
}

